#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
ll dp[110][110],w[110][110];
ll n,k;
ll pre[10100];
bool flag[10100];
struct node{
    ll x,y;
}a[10100];

bool cmp1(node a,node b){
    return w[a.x][a.y]<w[b.x][b.y];
}
bool cmp2(node a,node b){
    return dp[a.x][a.y]>dp[b.x][b.y];
}
int main()
{
    IOS;
    while(cin>>n>>k&&(n!=-1||k!=-1)){
        memset(flag,false,sizeof(flag));
        flag[0]=true;
        ll cnt=0;
        for(ll i=0;i<n;i++){
            for(ll j=0;j<n;j++){
                cin>>w[i][j];
                a[cnt].x=i;a[cnt++].y=j;
            }
        }
        for(ll i=0;i<n*n;i++)pre[i]=i;
        sort(a,a+cnt,cmp1);
        // for(ll i=0;i<cnt;i++)cout<<w[a[i].x][a[i].y]<<endl;
        for(ll i=0;i<cnt;i++){
            ll x=a[i].x,y=a[i].y;
            dp[x][y]=w[x][y];
            ll tx,ty;
            ty=y;
            for(ll h=1;h<=k;h++){//上
                tx=x-h;
                if(tx<0)break;
                if(w[tx][ty]<w[x][y]){
                    if(dp[tx][ty]+w[x][y]>=dp[x][y]){
                        if(flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                        else {
                            if(!flag[x*n+y]){
                                pre[x*n+y]=tx*n+ty;
                                dp[x][y]=dp[tx][ty]+w[x][y];
                            }
                        }
                    }
                    else {
                        if(!flag[x*n+y]&&flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                    }
                }
            }
            for(ll h=1;h<=k;h++){//下
                tx=x+h;
                if(tx>=n)break;
                if(w[tx][ty]<w[x][y]){
                    if(dp[tx][ty]+w[x][y]>=dp[x][y]){
                        if(flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                        else {
                            if(!flag[x*n+y]){
                                pre[x*n+y]=tx*n+ty;
                                dp[x][y]=dp[tx][ty]+w[x][y];
                            }
                        }
                    }
                    else {
                        if(!flag[x*n+y]&&flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                    }
                }
            }
            tx=x;
            for(ll h=1;h<=k;h++){//左
                ty=y-h;
                if(ty<0)break;
                if(w[tx][ty]<w[x][y]){
                    if(dp[tx][ty]+w[x][y]>=dp[x][y]){
                        if(flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                        else {
                            if(!flag[x*n+y]){
                                pre[x*n+y]=tx*n+ty;
                                dp[x][y]=dp[tx][ty]+w[x][y];
                            }
                        }
                    }
                    else {
                        if(!flag[x*n+y]&&flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                    }
                }
            }
            for(ll h=1;h<=k;h++){//右
                ty=y+h;
                if(ty>=n)break;
                if(w[tx][ty]<w[x][y]){
                    if(dp[tx][ty]+w[x][y]>=dp[x][y]){
                        if(flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                        else {
                            if(!flag[x*n+y]){
                                pre[x*n+y]=tx*n+ty;
                                dp[x][y]=dp[tx][ty]+w[x][y];
                            }
                        }
                    }
                    else {
                        if(!flag[x*n+y]&&flag[tx*n+ty]){
                            pre[x*n+y]=tx*n+ty;
                            dp[x][y]=dp[tx][ty]+w[x][y];
                            flag[x*n+y]=true;
                        }
                    }
                }
            }
        }
        sort(a,a+cnt,cmp2);
        ll ans=0;
        // for(ll id=a[0].x*n+a[0].y;id!=pre[id];id=pre[id]){
        //     cout<<"pre["<<id<<"]="<<pre[id]<<endl;
        // }
        for(ll i=0;i<cnt;i++){
            ll id=a[i].x*n+a[i].y;
            // while(id!=0&&pre[id]!=id){
            //     id=pre[id];
            // }
            // cout<<"hello"<<endl;
            if(flag[id]){ans=dp[a[i].x][a[i].y]-dp[0][0]+w[0][0];break;}
        }
        cout<<ans<<endl;
    }
    getchar();
    getchar();
    return 0;
}
